#ifndef TVM_HTAB_H_
#define TVM_HTAB_H_

#define KEY_LENGTH 64  // 键名最大长度
#define HTAB_SIZE 4096 // 哈希表最大长度

struct tvm_htab_node
{
    char *key;                  // 键
    int value;                  // 值
    void *valptr;               // 地址指针
    struct tvm_htab_node *next; // 下一个键值对空间地址
};

struct tvm_htab_ctx
{
    unsigned int num_nodes; // hash 节点数
    unsigned int size;      // hash table数量
    struct tvm_htab_node **nodes;
};

struct tvm_htab_ctx *tvm_htab_create();
void tvm_htab_destroy(struct tvm_htab_ctx *htab);

// 在表上添加一对键值对
int tvm_htab_add(struct tvm_htab_ctx *htab, const char *key, int value);
// 根据键名添加引用
int tvm_htab_add_ref(struct tvm_htab_ctx *htab, const char *key, const void *valptr, int len);
// 根据键名找到植
int tvm_htab_find(struct tvm_htab_ctx *htab, const char *key);
// 根据键名找到引用
char *tvm_htab_find_ref(struct tvm_htab_ctx *htab, const char *key);

#endif
